In a typical network, forwarding (e.g., switching/routing) is performed by the forwarding elements within the network. In a less constrained network such as the Internet, putting this functionality in the center of the network makes sense, as the devices at the edge of the network may not have the capability to make forwarding decisions and will not have knowledge of the network topology that would be required for such decisions.
FIG. 1 conceptually illustrates an example of a typical forwarding element 100 with a complex forwarding element operating system (OS) 105. As shown, the forwarding element 100 includes a packet processing board 110 with a network forwarding integrated circuit (e.g., a switch ASIC) 115 and a set of network interfaces 120. The network forwarding IC 115 handles packet processing as configured by the OS 105, and the network interfaces 120 are how packets are received/transmitted. In addition, the hardware of the forwarding element 100 includes a central processing unit (CPU) board 125 that includes a CPU (w/DRAM) 130 and various other devices 135. The forwarding element OS 105 runs on the CPU 130 and includes a kernel, an interface (e.g., a command line interface, graphical interface, etc.) that allows the switch to be programmed, a boot loader, various modules for managing the complex switching and routing functionalities of the data plane (e.g., routing protocol daemons, various APIs, etc.), as well as a data plane abstraction that enables the OS 105 to model the complex data plane and thus configure the network forwarding IC 115.
This functionality divide has also been ported to datacenters, with switches and routers (both physical and virtual) performing standard L2 switching and L3 routing. However, the operation of a datacenter would be improved by pushing the routing decisions to the edges. Doing so would require various changes to how the forwarding elements operate and to the protocols used for transmitting data packets through the network.